internal class Test {
    val c: Char = 1.toChar()
    val i: Int = 1

    fun operationsWithChar() {
        b(i > c.code)
        b(i >= c.code)
        b(i < c.code)
        b(i <= c.code)

        b(c.code > i)
        b(c.code >= i)
        b(c.code < i)
        b(c.code <= i)

        b(c.code == i)
        b(c.code != i)
        b(i == c.code)
        b(i != c.code)

        i(i + c.code)
        i(i - c.code)
        i(i / c.code)
        i(i * c.code)
        i(i % c.code)
        i(i or c.code)
        i(i and c.code)
        i(i xor c.code)
        i(i shl c.code)
        i(i shr c.code)
        i(i ushr c.code)
        i( /*operand 'i'*/i /*plus*/ +  /*operand 'c'*/c.code)
        i( /*operand 'i'*/i /*xor*/ xor  /*operand 'c'*/c.code)
        i( /*operand 'i'*/i /*shr*/ ushr  /*operand 'c'*/c.code)

        i(c.code + i)
        i(c.code - i)
        i(c.code / i)
        i(c.code * i)
        i(c.code % i)
        i(c.code or i)
        i(c.code and i)
        i(c.code xor i)
        i(c.code shl i)
        i(c.code shr i)
        i(c.code ushr i)

        i(c.code.inv())
        i(-c.code)
        i(+c.code)
        i( /*operand 'c'*/c.code.inv())
        i( /*operand 'c'*/-c.code)
        i( /*operand 'c'*/+c.code)
    }

    fun operationsWithCharLiteral() {
        b('0' > c)
        b('0' >= c)
        b('0' < c)
        b('0' <= c)

        b(c > '0')
        b(c >= '0')
        b(c < '0')
        b(c <= '0')

        b(c == '0')
        b(c != '0')

        b('0' == c)
        b('0' != c)

        b(i > '0'.code)
        b(i >= '0'.code)
        b(i < '0'.code)
        b(i <= '0'.code)

        b('0'.code > i)
        b('0'.code >= i)
        b('0'.code < i)
        b('0'.code <= i)

        b('0'.code == i)
        b('0'.code != i)

        b(i == '0'.code)
        b(i != '0'.code)

        i(i + '0'.code)
        i(i - '0'.code)
        i(i / '0'.code)
        i(i * '0'.code)
        i(i % '0'.code)
        i(i or '0'.code)
        i(i and '0'.code)
        i(i xor '0'.code)
        i(i shl '0'.code)
        i(i shr '0'.code)
        i(i ushr '0'.code)

        i(c.code + '0'.code)
        i(c.code - '0'.code)
        i(c.code / '0'.code)
        i(c.code * '0'.code)
        i(c.code % '0'.code)
        i(c.code or '0'.code)
        i(c.code and '0'.code)
        i(c.code xor '0'.code)
        i(c.code shl '0'.code)
        i(c.code shr '0'.code)
        i(c.code ushr '0'.code)

        i('0'.code + i)
        i('0'.code - i)
        i('0'.code / i)
        i('0'.code * i)
        i('0'.code % i)
        i('0'.code or i)
        i('0'.code and i)
        i('0'.code xor i)
        i('0'.code shl i)
        i('0'.code shr i)
        i('0'.code ushr i)

        i('0'.code + c.code)
        i('0'.code - c.code)
        i('0'.code / c.code)
        i('0'.code * c.code)
        i('0'.code % c.code)
        i('0'.code or c.code)
        i('0'.code and c.code)
        i('0'.code xor c.code)
        i('0'.code shl c.code)
        i('0'.code shr c.code)
        i('0'.code ushr c.code)

        i('0'.code.inv())
        i(-'0'.code)
        i(+'0'.code)
    }

    fun operationsWithCharLiterals() {
        b('A' > '0')
        b('A' >= '0')
        b('A' < '0')
        b('A' <= '0')

        b('0' == 'A')
        b('0' != 'A')

        i('A'.code + '0'.code)
        i('A'.code - '0'.code)
        i('A'.code / '0'.code)
        i('A'.code * '0'.code)
        i('A'.code % '0'.code)
        i('A'.code or '0'.code)
        i('A'.code and '0'.code)
        i('A'.code xor '0'.code)
        i('A'.code shl '0'.code)
        i('A'.code shr '0'.code)
        i('A'.code ushr '0'.code)
        i( /*operand 'A'*/'A'.code +  /*plus*/ /*operand '0'*/'0'.code)
        i( /*operand 'A'*/'A'.code xor  /*xor*/ /*operand '0'*/'0'.code)
        i( /*operand 'A'*/'A'.code ushr  /*shr*/ /*operand '0'*/'0'.code)
    }

    fun b(b: Boolean) {
    }

    fun i(i: Int) {
    }
}
